"""
1 位置参数
    调用函数时根据函数定义的参数位置来传递参数
2 关键字参数
    函数调用，通过键 = 值 形式加以指定。 可以让函数更加清晰，容易使用，同时也清除了参数的顺序需求。
    当位置参数和关键字参数混合使用时，位置参数必须放在关键字参数前面

3 缺省参数： 也叫默认参数，用于定义参数，为参数提供默认值，调用函数时可不传该默认参数的值

4 不定长参数： 也叫可变参数。用于不确定调用的时候会传递多少个参数（不传参也可以）的场景。此时，
        可包裹（packing）（1）位置参数，
        或者包裹（2）关键字参数，来进行参数传递。
"""

# 1 位置参数： 调用函数时根据函数定义的参数位置来传递参数

def user_info(name,age,gender):
    print(f'姓名为{name},年龄为{age},性别为{gender}')

user_info('张三',24,'男')
user_info('张三',age=25,gender='男')

# 2 关键字参数
user_info('张三',age=25,gender='男')


# 3 缺省参数
print('-'*30)
def user_info1(name,age,gender='男'):
    print(f'姓名为{name},年龄为{age},性别为{gender}')

user_info1('李四',28)
user_info1('李四',28,gender='女')

print('-'*30)

# 不确定参数
    #1、包裹位置传递
def user_func(*args):
    print(args)

user_func('Tom')  #('Tom',)  返回一个元组

user_func('Tom',18) #('Tom',18)

user_func()  #返回一个元组

print('---------------------包裹关键字传递--------------------------')

    #2、包裹关键字传递
def user_dict(**kwargs):
    print(kwargs)

user_dict(name = '王文',age = 30, gender = '女') # 返回的是一个字典